package com.chilly.other.pattern.strategy;

//抽象类：鸭子
public abstract class Duck {
    FlyBehavior flyBehavior;
    QuackBehavior quackBeahavior;

    public Duck() {//子类的构造函数中可以定义行为

    }

    //在本抽象类中已经自己实现了
    public void Quack() {
        //System.out.println("~~嘎嘎嘎~~");
        quackBeahavior.quack();
    }

    public void Fly() {
        flyBehavior.fly();
    }

    //由子类去实现
    public abstract void display();

    //在本抽象类中已经自己实现了
    public void swim() {
        System.out.println("~~我会游泳~~");
    }

    //实例化对象时可以动态的改变对象的行为(比继承灵活性强)
    public void setFlyBehavior(FlyBehavior fb) {
        flyBehavior = fb;
    }

    //实例化对象时可以动态的改变对象的行为
    public void setQuackBeahavior(QuackBehavior qb) {
        quackBeahavior = qb;
    }

}
